package com.chen.utils;


import java.io.Serializable;


/**
 * @Author chen_jiapin
 * @Date 2022/8/15 16:11
 * @Version 1.0
 */
public class R<T> implements Serializable
{
    private static final long serialVersionUID = 1L;




    /** 成功 */
    public static final int SUCCESS = 200;




    /** 失败 */
    public static final int FAIL = 500;




    private int code;




    private String msg;




    private T data;




    public static <T> R<T> success()
    {
        return restResult(null, SUCCESS, "操作成功");
    }




    public static <T> R<T> success(T data)
    {
        return restResult(data, SUCCESS, "操作成功");
    }




    public static <T> R<T> success(T data, String msg)
    {
        return restResult(data, SUCCESS, msg);
    }




    public static <T> R<T> fail()
    {
        return restResult(null, FAIL, "操作失败");
    }




    public static <T> R<T> fail(String msg)
    {
        return restResult(null, FAIL, msg);
    }




    public static <T> R<T> fail(T data)
    {
        return restResult(data, FAIL, "操作失败");
    }




    public static <T> R<T> fail(T data, String msg)
    {
        return restResult(data, FAIL, msg);
    }




    public static <T> R<T> fail(int code, String msg)
    {
        return restResult(null, code, msg);
    }




    private static <T> R<T> restResult(T data, int code, String msg)
    {
        R<T> apiResult = new R<>();
        apiResult.setCode(code);
        apiResult.setData(data);
        apiResult.setMsg(msg);
        return apiResult;
    }




    public int getCode()
    {
        return code;
    }




    public void setCode(int code)
    {
        this.code = code;
    }




    public String getMsg()
    {
        return msg;
    }




    public void setMsg(String msg)
    {
        this.msg = msg;
    }




    public T getData()
    {
        return data;
    }




    public void setData(T data)
    {
        this.data = data;
    }
}